/**
 * @description router全局配置，如有必要可分文件抽离，其中asyncRoutes只有在intelligence模式下才会用到，pro版只支持remixIcon图标，具体配置请查看vip群文档
 */
import Vue from 'vue'
import VueRouter from 'vue-router'
// import Layout from '@/vab/layouts'
import { publicPath, routerMode } from '@/config'

Vue.use(VueRouter)

export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login'),
    meta: {
      hidden: true,
    },
  },
  {
    path: '/select',
    component: () => import('@/views/select'),
    meta: {
      hidden: true,
    },
  },

  {
    path: '/register',
    component: () => import('@/views/register'),
    meta: {
      hidden: true,
    },
  },
  {
    path: '/wxlogin',
    component: () => import('@/views/wxlogin'),
    meta: {
      hidden: true,
    },
  },
  {
    //wechatpay
    path: '/pay',
    component: () => import('@/views/payment/wechatpay'),
    meta: {
      hidden: true,
    },
  },
  {
    //wechatpay
    path: '/pay/order',
    component: () => import('@/views/payment/user'),
    meta: {
      hidden: true,
    },
  },
  {
    //h5pay
    path: '/h5pay',
    component: () => import('@/views/payment/h5pay'),
    meta: {
      hidden: true,
    },
  },

  {
    path: '/helpdoc',
    component: () => import('@/views/display'),
    meta: {
      hidden: true,
    },
  },

  {
    path: '/403',
    name: '403',
    component: () => import('@/views/403'),
    meta: {
      hidden: true,
    },
  },
  {
    path: '/404',
    name: '404',
    component: () => import('@/views/404'),
    meta: {
      hidden: true,
    },
  },
]

export const asyncRoutes = [
  //   {
  //     path: '/',
  //     name: 'Root',
  //     component: Layout,
  //     meta: {
  //       title: '概况',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'index',
  //         name: 'Index',
  //         component: () => import('@/views/index'),
  //         meta: {
  //           title: '店铺概况',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/work',
  //     name: 'Work',
  //     component: Layout,
  //     meta: {
  //       title: '预约',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'work',
  //         name: 'Work',
  //         component: () => import('@/views/work'),
  //         meta: {
  //           title: '工作台',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'reservation',
  //         name: 'Reservation',
  //         component: () => import('@/views/reservation'),
  //         meta: {
  //           title: '预约列表',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'reception',
  //         name: 'Reception',
  //         component: () => import('@/views/reception'),
  //         meta: {
  //           title: '接诊列表',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/calendar',
  //     name: 'Calendar',
  //     component: Layout,
  //     meta: {
  //       title: '店务',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'calendar',
  //         name: 'Calendar',
  //         component: () => import('@/views/calendar'),
  //         meta: {
  //           title: '工作日历',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'schedule',
  //         name: 'Schedule',
  //         component: () => import('@/views/schedule'),
  //         meta: {
  //           title: '排班管理',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/customer',
  //     name: 'Customer',
  //     component: Layout,
  //     meta: {
  //       title: '客户',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'customer',
  //         name: 'Customer',
  //         component: () => import('@/views/customer'),
  //         meta: {
  //           title: '客户档案',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'customerGroup',
  //         name: 'CustomerGroup',
  //         component: () => import('@/views/customer/group'),
  //         meta: {
  //           title: '客户组',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'customerLevel',
  //         name: 'CustomerLevel',
  //         component: () => import('@/views/customer/level'),
  //         meta: {
  //           title: '客户等级',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/report',
  //     name: 'Report',
  //     component: Layout,
  //     meta: {
  //       title: '报告',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'report',
  //         name: 'Report',
  //         component: () => import('@/views/report'),
  //         meta: {
  //           title: '检验报告',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'reportTemplate',
  //         name: 'ReportTemplate',
  //         component: () => import('@/views/report/templates'),
  //         meta: {
  //           title: '报告模板',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'reportGroup',
  //         name: 'ReportGroup',
  //         component: () => import('@/views/report/group'),
  //         meta: {
  //           title: '报告分组',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/charge',
  //     name: 'Charge',
  //     component: Layout,
  //     meta: {
  //       title: '结算',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'charge',
  //         name: 'Charge',
  //         component: () => import('@/views/charge'),
  //         meta: {
  //           title: '结账收款',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'prepaid',
  //         name: 'Prepaid',
  //         component: () => import('@/views/prepaid'),
  //         meta: {
  //           title: '储值',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'verification',
  //         name: 'Verification',
  //         component: () => import('@/views/verification'),
  //         meta: {
  //           title: '核销',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/order',
  //     name: 'Order',
  //     component: Layout,
  //     meta: {
  //       title: '单据',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'order',
  //         name: 'Order',
  //         component: () => import('@/views/order'),
  //         meta: {
  //           title: '订单管理',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'afterOrder',
  //         name: 'AfterOrder',
  //         component: () => import('@/views/after/order'),
  //         meta: {
  //           title: '售后单',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/goods',
  //     name: 'Goods',
  //     component: Layout,
  //     meta: {
  //       title: '商品',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'goods',
  //         name: 'Goods',
  //         component: () => import('@/views/goods'),
  //         meta: {
  //           title: '商品管理',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'goodsMethod',
  //         name: 'GoodsMethod',
  //         component: () => import('@/views/goods/method'),
  //         meta: {
  //           title: '商品类别',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/wms',
  //     name: 'Wms',
  //     component: Layout,
  //     meta: {
  //       title: '采购',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'inStock',
  //         name: 'inStock',
  //         component: () => import('@/views/wms/instock'),
  //         meta: {
  //           title: '采购入库',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'inRefund',
  //         name: 'inRefund',
  //         component: () => import('@/views/wms/inrefund'),
  //         meta: {
  //           title: '采购退货',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'sheetIn',
  //         name: 'SheetIn',
  //         component: () => import('@/views/sheet/in'),
  //         meta: {
  //           title: '采购报表',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/outStock',
  //     name: 'OutStock',
  //     component: Layout,
  //     meta: {
  //       title: '销售',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'outStock',
  //         name: 'outStock',
  //         component: () => import('@/views/wms/outstock'),
  //         meta: {
  //           title: '销售出库',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'outRefund',
  //         name: 'OutRefund',
  //         component: () => import('@/views/wms/outrefund'),
  //         meta: {
  //           title: '采购退货',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'sheetOut',
  //         name: 'SheetOut',
  //         component: () => import('@/views/sheet/out'),
  //         meta: {
  //           title: '采购报表',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/stock',
  //     name: 'Stock',
  //     component: Layout,
  //     meta: {
  //       title: '库存',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'allocation',
  //         name: 'Allocation',
  //         component: () => import('@/views/wms/allocation'),
  //         meta: {
  //           title: '调拨单',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'inventory',
  //         name: 'Inventory',
  //         component: () => import('@/views/wms/inventory'),
  //         meta: {
  //           title: '采购退货',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'costAdjust',
  //         name: 'CostAdjust',
  //         component: () => import('@/views/wms/costadjust'),
  //         meta: {
  //           title: '成本调整单',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'stockBalance',
  //         name: 'StockBalance',
  //         component: () => import('@/views/wms/stockbalance'),
  //         meta: {
  //           title: '库存余额',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'sheetStock',
  //         name: 'SheetStock',
  //         component: () => import('@/views/sheet/stock'),
  //         meta: {
  //           title: '库存报表',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/assets',
  //     name: 'Assets',
  //     component: Layout,
  //     meta: {
  //       title: '资产',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'assetsBalance',
  //         name: 'AssetsBalance',
  //         component: () => import('@/views/assets/balance'),
  //         meta: {
  //           title: '店铺余额',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       // {
  //       //   path: 'assetPrepaid',
  //       //   name: 'AssetPrepaid',
  //       //   component: () => import('@/views/asset/prepaidbill'),
  //       //   meta: {
  //       //     title: '储值金',
  //       //     icon: 'home-2-line',
  //       //     noClosable: true,
  //       //   },
  //       // },
  //       // {
  //       //   path: 'assetBill',
  //       //   name: 'AssetBill',
  //       //   component: () => import('@/views/asset/feebill'),
  //       //   meta: {
  //       //     title: '账单',
  //       //     icon: 'home-2-line',
  //       //     noClosable: true,
  //       //   },
  //       // },
  //     ],
  //   },
  //   {
  //     path: '/mechanism',
  //     name: 'Mechanism',
  //     component: Layout,
  //     meta: {
  //       title: '店铺',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'mechanism',
  //         name: 'Mechanism',
  //         component: () => import('@/views/setting/mechanism'),
  //         meta: {
  //           title: '店铺信息',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'staff',
  //         name: 'Staff',
  //         component: () => import('@/views/setting/staff'),
  //         meta: {
  //           title: '员工管理',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'staffRole',
  //         name: 'StaffRole',
  //         component: () => import('@/views/setting/staffrole'),
  //         meta: {
  //           title: '角色管理',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'supplier',
  //         name: 'Supplier',
  //         component: () => import('@/views/setting/supplier'),
  //         meta: {
  //           title: '供货商',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'department',
  //         name: 'Department',
  //         component: () => import('@/views/setting/department'),
  //         meta: {
  //           title: '部门管理',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'goodsSetting',
  //         name: 'GoodsSetting',
  //         component: () => import('@/views/setting/goods'),
  //         meta: {
  //           title: '商品设置',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'afterSetting',
  //         name: 'AfterSetting',
  //         component: () => import('@/views/setting/after'),
  //         meta: {
  //           title: '售后信息',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'orderSetting',
  //         name: 'OrderSetting',
  //         component: () => import('@/views/setting/order'),
  //         meta: {
  //           title: '订单设置',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },
  //   {
  //     path: '/channel',
  //     name: 'Channel',
  //     component: Layout,
  //     meta: {
  //       title: '营销组件',
  //       icon: 'home-2-line',
  //       breadcrumbHidden: true,
  //     },
  //     children: [
  //       {
  //         path: 'channel',
  //         name: 'channel',
  //         component: () => import('@/views/ass/channel'),
  //         meta: {
  //           title: '渠道',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //       {
  //         path: 'application',
  //         name: 'Application',
  //         component: () => import('@/views/ass/application'),
  //         meta: {
  //           title: '应用',
  //           icon: 'home-2-line',
  //           noClosable: true,
  //         },
  //       },
  //     ],
  //   },

  // {
  //   path: '/',
  //   name: 'Root',
  //   component: Layout,
  //   meta: {
  //     title: '工作台',
  //     icon: 'home-2-line',
  //     breadcrumbHidden: true,
  //   },
  //   children: [
  //     {
  //       path: 'Reception',
  //       name: 'Reception',
  //       component: () => import('@/views/Reception'),
  //       meta: {
  //         title: '前台',
  //         icon: 'account-circle-line',
  //         noClosable: true,
  //       },
  //     },
  //     {
  //       path: 'work',
  //       name: 'scheduling',
  //       component: () => import('@/views/work'),
  //       meta: {
  //         title: '排班',
  //         icon: 'align-center',
  //         noClosable: true,
  //       },
  //     },
  //     {
  //       path: 'index',
  //       name: 'Index',
  //       component: () => import('@/views/index'),
  //       meta: {
  //         title: '预约列表',
  //         icon: 'apps-line',
  //         noClosable: true,
  //       },
  //     },
  //     {
  //       path: 'writeDown',
  //       name: 'writeDown',
  //       component: () => import('@/views/writeDown'),
  //       meta: {
  //         title: '登记',
  //         icon: 'article-line',
  //         noClosable: true,
  //       },
  //     },
  //     {
  //       path: 'seeADoctorList',
  //       name: 'seeADoctorList',
  //       component: () => import('@/views/seeADoctorList'),
  //       meta: {
  //         title: '就诊记录',
  //         icon: 'ball-pen-line',
  //         noClosable: true,
  //       },
  //     },
  //     {
  //       path: 'treatment',
  //       name: 'treatment',
  //       component: () => import('@/views/treatment'),
  //       meta: {
  //         title: '接诊',
  //         icon: 'artboard-line',
  //         noClosable: true,
  //       },
  //     },
  //   ],
  // },
  // {
  //   path: '/setUp',
  //   name: 'setUp',
  //   component: Layout,
  //   meta: {
  //     title: '设置',
  //     icon: 'home-2-line',
  //     breadcrumbHidden: true,
  //   },
  //   children: [
  //     {
  //       path: 'organization',
  //       name: 'organization',
  //       component: () => import('@/views/organization'),
  //       meta: {
  //         title: '添加组织',
  //         icon: 'account-circle-line',
  //         noClosable: true,
  //       },
  //     },
  //   ],
  // },
  {
    path: '*',
    redirect: '/404',
    meta: {
      hidden: true,
    },
  },
]

const router = createRouter()

function fatteningRoutes(routes) {
  return routes.flatMap((route) => {
    return route.children ? fatteningRoutes(route.children) : route
  })
}

export function resetRouter(routes = constantRoutes) {
  routes.map((route) => {
    if (route.children) {
      route.children = fatteningRoutes(route.children)
    }
  })
  router.matcher = createRouter(routes).matcher
}

function createRouter(routes = constantRoutes) {
  return new VueRouter({
    base: publicPath,
    mode: routerMode,
    scrollBehavior: () => ({
      y: 0,
    }),
    routes: routes,
  })
}

const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch((err) => err)
}

export default router
